ホームに戻る
出典 :
CRT ライブラリを使用したメモリ リークの検出 - Microsoft メモリリークの自動検出をしてみる - wata_d's diary
目次 :

CRT(Cランタイム)ライブラリの機能を用いて、メモリリークを検出することができる。
  1. stdafx.h 末尾に以下のコードを追記する。
    ※デバッグ対象のソースが stdafx.h をインクルードしていることが前提
    (MFC不使用時)
    #if _DEBUG #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) #define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__) #define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) #define _recalloc(p, c, s) _recalloc_dbg(p, c, s, _NORMAL_BLOCK, __FILE__, __LINE__) #define _expand(p, s) _expand_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) #endif
    (MFC使用時)
    #if _DEBUG #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> #define new new(__FILE__, __LINE__) #endif
  2. エントリ関数(CWinApp::InitInstance() など)の先頭に以下のコードを追記する。
    ::_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);
  3. プログラムをビルドし、デバッグを開始する。プログラム終了時に「出力」ウィンドウに検出結果が表示される。